package my.springboot.validation.verify;

import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
import static java.lang.annotation.ElementType.CONSTRUCTOR;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import javax.validation.Constraint;
import javax.validation.Payload;

import my.springboot.validation.verify.impl.CharCheckImpl;
import my.springboot.validation.verify.impl.ListCharCheckImpl;

/**
 * 自定义参数校验注解：检测utf8字符
 * @author xsw
 * @date 2018-6-21
 */
@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = {CharCheckImpl.class,ListCharCheckImpl.class})
public @interface CharCheck {
	
	CharEnum[] value() default {CharEnum.utf8};
	
	String message() default "含非法字符";

	Class<?>[] groups() default { };

	Class<? extends Payload>[] payload() default { };

	/**
	 * 定义List，为了让Bean的一个属性上可以添加多套规则
	 */
	@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
	@Retention(RUNTIME)
	@Documented
	@interface List {

		CharCheck[] value();
	}
	
	public enum CharEnum {
		/**
		 * utf8字符
		 */
		utf8,
		/**
		 * 英文
		 */
		english,
		/**
		 * 中文
		 */
		chinese,
		/**
		 * 数字
		 */
		number,
		/**
		 * 去除表情
		 */
		exceptEmoji,
	}
}
